<?php
/*
	Version   :  1.4
	Created   :  20081004
	Modified  :  20091230
	Author    :  Pablo Ramirez
	co-Author :
	Descr     : Modelo de Entidad "Order"
	Changelog : 1.0 Version Inicial
				1.1 Se agregan metodos de busqueda para invoice
				1.2 Se modifican metodos de busqueda para invoice para utilizar ord_fechacreacion en vez de ord_fechacierre
				1.3 Se modifican metodos de busqueda para invoice para usar variable de estado de orden
				1.4 Se crea metodo para confirmar, des-confirmar ordenes en factura
*/
class Order extends AppModel
{
	var $name       = 'Order';
	var $id         = 'ord_codigo';
	var $primaryKey = 'ord_codigo';
	var $validate   = array('ord_codigo'            => VALID_NOT_EMPTY,
							//'ord_desripcion'        => VALID_NOT_EMPTY,
							'ord_estado'            => VALID_NOT_EMPTY,
							'ord_glosa'             => VALID_NOT_EMPTY,
							'ord_fechacreacion'     => VALID_NOT_EMPTY,
							//'ord_fechaultimoestado' => VALID_NOT_EMPTY,
							//'ord_observaciones'     => VALID_NOT_EMPTY,
							//'owc_codigo'            => VALID_NOT_EMPTY,
							'own_codigo'            => VALID_NUMBER,
							'sut_codigo'            => VALID_NOT_EMPTY);
							
	var $belongsTo = array( 'Owner'           => array('className'  => 'Owner',          'foreignKey' => 'own_codigo'),
							'SurveyType'      => array('className'  => 'SurveyType',     'foreignKey' => 'sut_codigo')
							);

	var $hasMany = array(   'OrderDepot'      => array('className'  => 'OrderDepot',     'foreignKey' => 'ord_codigo'),
							'OrderContainer'  => array('className'  => 'OrderContainer', 'foreignKey' => 'ord_codigo')
							);

	/*var $hasAndBelongsToMany = array('Container' => array('className'           => 'Container',
														'joinTable'             => 'order_containers',
														//'joinTable'             => 'or_con',
														'foreignKey'            => 'ord_codigo',
														'associationForeignKey' => 'cod_codigo',
														//'with'                  => 'OrderContainer',
														'unique'                => false)
									);*/
	
	function getOrdersByOwnerName($filter) {
		//$results = $this->findAll("Order.$field = $filter");
		$results = $this->findAll("Owner.own_nombre like '%$filter%'");
		return $results;
	}
	
	function getOrdersForInvoice($owner, $cou_codigo, $from, $to, $state) {
		if (($from != '') and ($to != '')) {
			$results = $this->findAll("Owner.own_codigo = '$owner' and
									   Order.ord_fechacreacion >= '$from' and
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = '$state' and
									   Order.ord_facturada = 'NO'");
			return $results;
		} elseif (($from != '') and ($to == '')) {
			$results = $this->findAll("Owner.own_codigo = '$owner' and 
									   Order.ord_fechacreacion >= '$from' and 
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = '$state' and
									   Order.ord_facturada = 'NO'");
			return $results;
		} elseif (($to != '') and ($from == '')) {
			$results = $this->findAll("Owner.own_codigo = '$owner' and 
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = '$state' and
									   Order.ord_facturada = 'NO'");
			return $results;
		} else {
			$results = $this->findAll("Owner.own_codigo = '$owner' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = '$state' and
									   Order.ord_facturada = 'NO'");
			return $results;
		}
		
	}
	
	function getOrdersForReport($owner, $cou_codigo, $from, $to) {
		if (($from != '') and ($to != '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.ord_fechacreacion >= '$from' and
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = 'N'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($from != '') and ($to == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion >= '$from' and 
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = 'N'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($to != '') and ($from == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = 'N'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} else {
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.ord_estado = 'N'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		}
		
	}
	
	function getOrdersForReport2($owner, $cou_codigo, $from, $to, $survey_type, $state) {
		if (($from != '') and ($to != '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.ord_fechacreacion >= '$from' and
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($from != '') and ($to == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion >= '$from' and 
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($to != '') and ($from == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} else {
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		}
		
	}
	
	function getOrdersForResume($owner, $cou_codigo, $survey_type, $state, $from, $to) {
		if (($from != '') and ($to != '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.ord_fechacreacion >= '$from' and
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($from != '') and ($to == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion >= '$from' and 
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} elseif (($to != '') and ($from == '')) {
			// Se cambia Order.ord_fechacierre por Order.ord_fechacreacion
			$results = $this->findAll("Order.own_codigo = '$owner' and 
									   Order.ord_fechacreacion <= '$to' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		} else {
			$results = $this->findAll("Order.own_codigo = '$owner' and
									   Order.cou_codigo = '$cou_codigo' and
									   Order.sut_codigo = '$survey_type' and
									   Order.ord_estado = '$state'",
									   array(), //fields
									   'ord_codigo ASC', //order
									   null, //limit
									   null, //page
									   -1    //recursive
									   );
			return $results;
		}
		
	}
	
	function invoiceConfirm($order_id) {
		$this->id = $order_id;
		$ord_facturada = $this->field('ord_facturada', "ord_codigo = '$order_id'");
		switch ($ord_facturada) {
			case 'YES':
				$facturada_value = 'NO';
				$retorno = '';
				break;
			case 'NO':
				$facturada_value = 'YES';
				$retorno = 'confirmada';
				break;
		}
		if (($this->saveField('ord_facturada', $facturada_value)) and ($this->saveField('ord_fechafactura', date("Y-m-d")))) {
			return $retorno;
		} else {
			return 'Error al guardar cambios';
		}
	}
}
?>